package main

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql" // init()
	"github.com/jmoiron/sqlx"
)

var db *sqlx.DB	// 是一个连接池对象

type user struct{
	ID int
	Name string
	Age int
}

func initDB() (err error){
	// 数据库信息
	// 用户名:密码@tcp(ip:端口)/数据库的名字
	dsn := "go:go@tcp(127.0.0.1:3306)/goday"
	// 连接数据库
	db, err = sqlx.Connect("mysql", dsn)	// 不会校验用户名和密码是否正确
	if err != nil{	// dsn格式不正确的时候会报错
		return
	}
	err = db.Ping()	// 尝试连接数据库
	if err != nil{
		return
	}

	db.SetMaxOpenConns(10)	// 设置数据库连接池的最大连接数
	db.SetMaxIdleConns(5)	// 设置最大空闲连接数
	return
}

func main(){
	err := initDB()
	if err != nil{
		fmt.Printf("init DB failed,err: %v\n", err)
		return
	}
	sqlStr1 := `select id, name, age from user  where id=1;`
	var u user
	err = db.Get(&u, sqlStr1)
	if err != nil{
		fmt.Printf("exec failed,err: %v\n", err)
		return
	}
	fmt.Printf("u:%#v\n", u)

	var userList []user
	sqlStr2 := `select id,name,age from user`

	err = db.Select(&userList, sqlStr2)
	if err != nil{
		fmt.Printf("select failed,err: %v\n", err)
		return
	}
	fmt.Printf("userList:%#v\n",userList)
}